home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / dist-packages / gst-0.10 / gst / extend / sources.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  5.3 KB  |  136 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import os
  5. import sys
  6. import gobject
  7. import pygst
  8. pygst.require('0.10')
  9. import gst
  10. from pygobject import gsignal
  11. EOS = 'EOS'
  12. ERROR = 'ERROR'
  13. WRONG_TYPE = 'WRONG_TYPE'
  14. UNKNOWN_TYPE = 'UNKNOWN_TYPE'
  15.  
  16. class AudioSource(gst.Bin):
  17.     '''A bin for audio sources with proper audio converters'''
  18.     gsignal('done', str)
  19.     gsignal('prerolled')
  20.     
  21.     def __init__(self, filename, caps = 'audio/x-raw-int,channels=2,rate=44100'):
  22.         gst.Bin.__init__(self)
  23.         self.filename = filename
  24.         self.outcaps = caps
  25.         self.filesrc = gst.element_factory_make('filesrc')
  26.         self.filesrc.set_property('location', self.filename)
  27.         self.dbin = gst.element_factory_make('decodebin')
  28.         self.audioconvert = gst.element_factory_make('audioconvert')
  29.         self.audioresample = gst.element_factory_make('audioresample')
  30.         self.volume = gst.element_factory_make('volume')
  31.         self.add(self.filesrc, self.dbin, self.audioconvert, self.audioresample, self.volume)
  32.         self.filesrc.link(self.dbin)
  33.         self.audioconvert.link(self.audioresample)
  34.         self.audioresample.link(self.volume, caps)
  35.         self.dbin.connect('new-decoded-pad', self._new_decoded_pad_cb)
  36.         self.dbin.connect('unknown-type', self._unknown_type_cb)
  37.         self._srcpad = None
  38.  
  39.     
  40.     def __repr__(self):
  41.         return '<AudioSource for %s>' % self.filename
  42.  
  43.     
  44.     def set_volume(self, volume):
  45.         gst.debug('setting volume to %f' % volume)
  46.         self.volume.set_property('volume', volume)
  47.  
  48.     
  49.     def _new_decoded_pad_cb(self, dbin, pad, is_last):
  50.         gst.debug('new decoded pad: pad %r [%s]' % (pad, pad.get_caps().to_string()))
  51.         if 'audio' not in pad.get_caps().to_string() or self._srcpad:
  52.             return None
  53.         gst.debug('linking pad %r to audioconvert' % pad)
  54.         pad.link(self.audioconvert.get_pad('sink'))
  55.         self._srcpad = gst.GhostPad('src', self.volume.get_pad('src'))
  56.         self._srcpad.set_active(True)
  57.         self.add_pad(self._srcpad)
  58.  
  59.     
  60.     def _unknown_type_cb(self, pad, caps):
  61.         self.emit('done', UNKNOWN_TYPE)
  62.  
  63.     
  64.     def stop(self):
  65.         self.set_state(gst.STATE_NULL)
  66.  
  67.     
  68.     def clean(self):
  69.         self.stop()
  70.         self.remove(self.filesrc)
  71.         self.remove(self.dbin)
  72.         self.remove(self.audioconvert)
  73.         self.remove(self.audioresample)
  74.         self.remove(self.volume)
  75.         self.filesrc = None
  76.         self.dbin = None
  77.         self.audioconvert = None
  78.         self.volume = None
  79.  
  80.  
  81. gobject.type_register(AudioSource)
  82. if __name__ == '__main__':
  83.     main = gobject.MainLoop()
  84.     
  85.     def _done_cb(source, reason):
  86.         print 'Done'
  87.         sys.stdout.flush()
  88.         if reason != EOS:
  89.             print 'Some error happened: %s' % reason
  90.         
  91.         main.quit()
  92.  
  93.     
  94.     def _error_cb(source, element, gerror, message):
  95.         print 'Error: %s' % gerror
  96.         main.quit()
  97.  
  98.     
  99.     try:
  100.         source = AudioSource(sys.argv[1])
  101.     except IndexError:
  102.         sys.stderr.write('Please give a filename to play\n')
  103.         sys.exit(1)
  104.  
  105.     pipeline = gst.Pipeline('playing')
  106.     source.connect('done', _done_cb)
  107.     pipeline.connect('error', _error_cb)
  108.     p = 'osssink'
  109.     if len(sys.argv) > 2:
  110.         p = ' '.join(sys.argv[2:])
  111.     
  112.     pipeline.add(source)
  113.     sink = gst.parse_launch(p)
  114.     pipeline.add(sink)
  115.     source.link(sink)
  116.     
  117.     def _start(pipeline):
  118.         print 'setting pipeline to PLAYING'
  119.         pipeline.set_state(gst.STATE_PLAYING)
  120.         print 'set pipeline to PLAYING'
  121.  
  122.     gobject.timeout_add(0, _start, pipeline)
  123.     gobject.idle_add(pipeline.iterate)
  124.     print 'Going into main loop'
  125.     main.run()
  126.     print 'Left main loop'
  127.     pipeline.set_state(gst.STATE_NULL)
  128.     pipeline.remove(source)
  129.     pipeline.remove(sink)
  130.     utils.gc_collect('cleaned out pipeline')
  131.     source.clean()
  132.     utils.gc_collect('cleaned up source')
  133.     source = None
  134.     utils.gc_collect('set source to None')
  135.  
  136.